Add a GtkEntry::invisible-char style property
authorMatthias Clasen <mclasen@redhat.com>
Thu, 30 Apr 2009 18:40:22 +0000 (14:40 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 30 Apr 2009 18:40:22 +0000 (14:40 -0400)
Allow themes to set a preferred invisible character. GTK+ will
still fall back to other candidates if the character is not available
in the font.

NEWS
gtk/gtkentry.c

diff --git a/NEWS b/NEWS
index 0019b138e4c7f9f0a571b65c15e70fd91c692ba7..5037f3e1a94bd99ac3c17c7fd4b54ecbe195cbbd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Overview of Changes from GTK+ 2.16.x to 2.17.0
+==============================================
+
+* Changes that are relevant for theme authors
+ - GtkEntry now has a ::invisible-char style property that allows
+   themes to set the preferred invisible character
+
+
 Overview of Changes from GTK+ 2.16.0 to 2.16.1
 ==============================================
 
index 607ef878a5656642bb10ebfa15b2c9578c4eb931..a21e94f57fd1d72ed410e2231bd65f6c096cf1f0 100644 (file)
@@ -1213,6 +1213,27 @@ gtk_entry_class_init (GtkEntryClass *class)
                                                                GTK_TYPE_BORDER,
                                                                GTK_PARAM_READABLE));
   
+  /**
+   * GtkEntry::invisible-char:
+   *
+   * The invisible character is used when masking entry contents (in
+   * \"password mode\")"). When it is not explicitly set with the
+   * #GtkEntry::invisible-char property, GTK+ determines the character
+   * to use from a list of possible candidates, depending on availability
+   * in the current font.
+   *
+   * This style property allows the theme to prepend a character
+   * to the list of candidates.
+   *
+   * Since: 2.22
+   */
+  gtk_widget_class_install_style_property (widget_class,
+                                           g_param_spec_unichar ("invisible-char",
+                                                                P_("Invisible character"),
+                                                                P_("The character to use when masking entry contents (in \"password mode\")"),
+                                                                0,
+                                                                GTK_PARAM_READABLE));
+  
   /**
    * GtkEntry::populate-popup:
    * @entry: The entry on which the signal is emitted
@@ -2149,12 +2170,18 @@ find_invisible_char (GtkWidget *widget)
   PangoAttrList *attr_list;
   gint i;
   gunichar invisible_chars [] = {
+    0,
     0x25cf, /* BLACK CIRCLE */
     0x2022, /* BULLET */
     0x2731, /* HEAVY ASTERISK */
     0x273a  /* SIXTEEN POINTED ASTERISK */
   };
 
+  if (widget->style)
+    gtk_widget_style_get (widget,
+                          "invisible-char", &invisible_chars[0],
+                          NULL);
+
   layout = gtk_widget_create_pango_layout (widget, NULL);
 
   attr_list = pango_attr_list_new ();
@@ -2163,7 +2190,7 @@ find_invisible_char (GtkWidget *widget)
   pango_layout_set_attributes (layout, attr_list);
   pango_attr_list_unref (attr_list);
 
-  for (i = 0; i < G_N_ELEMENTS (invisible_chars); i++)
+  for (i = (invisible_chars[0] != 0 ? 0 : 1); i < G_N_ELEMENTS (invisible_chars); i++)
     {
       gchar text[7] = { 0, };
       gint len, count;
@@ -2181,6 +2208,7 @@ find_invisible_char (GtkWidget *widget)
     }
 
   g_object_unref (layout);
+
   return '*';
 }